#ifndef DBFACTORY_H
#define DBFACTORY_H
#include <QSqlDatabase>
#include <QSqlRecord>
#include <QStringList>
#include <QVariantList>

class DBFactory
{
public:
    static DBFactory* getInstance();

    void showAll();
    QStringList getAllField();
    void getContentByField(QString fieldName, QVector<QVariant>& result);
    int getRowCount();
    void getAllInfo(QVector<QSqlRecord> &result);
    void getAllInfo(QVector<QVector<QVariant>> &result);
    // 第一个参数是结果，第二个参数是字段名，第三个参数是字段条件
    void getSpecialInfo(QVector<QSqlRecord> &result, const QString& field, const QVector<QString>& conditions);
    // 第一个参数是结果，第二个参数是字段列表，第三个参数是字段条件
    void getSpecialInfo(QVector<QSqlRecord> &result, const QVector<QString>& field, const QVector<QVector<QString>>& conditionList);
    // 连接数据库
    bool connect(QString username, QString password);
    // 获取数据表名称
    void getTableNames(QVector<QString>& tableNameList);
    // 合成条件字符串
    // 第一个参数是字段名，第二个参数是筛选条件
    QString mergeCondition(const QString& field, const QVector<QString>& condition);
    // 设置当前数据表
    void setCurrentTable(QString tableName);
private:
    DBFactory();
    static DBFactory* m_dbf;
    QSqlDatabase m_db;
    QString m_tableName;
};

#endif // DBFACTORY_H
